"""
入口文件
"""
import uvicorn
import os
import argparse
import sys
from pathlib import Path

def validate_log_dir(log_dir_path):
    """
    验证日志目录是否可访问和可写
    
    参数:
        log_dir_path: 日志目录路径
        
    返回:
        验证通过返回True，否则返回False
    """
    log_dir = Path(log_dir_path)
    
    # 检查目录是否存在，不存在则创建
    if not log_dir.exists():
        try:
            log_dir.mkdir(parents=True, exist_ok=True)
            print(f"日志目录已创建: {log_dir}")
        except Exception as e:
            print(f"无法创建日志目录 {log_dir}: {str(e)}")
            return False
    
    # 检查是否是目录
    if not log_dir.is_dir():
        print(f"指定的日志路径不是目录: {log_dir}")
        return False
    
    # 检查可写权限
    try:
        test_file = log_dir / "test_write.tmp"
        with open(test_file, "w") as f:
            f.write("test")
        test_file.unlink()  # 删除测试文件
    except Exception as e:
        print(f"日志目录不可写 {log_dir}: {str(e)}")
        return False
    
    print(f"日志目录验证通过: {log_dir}")
    return True

def main():
    """
    主函数，解析命令行参数并启动应用
    """
    # 解析命令行参数
    parser = argparse.ArgumentParser(description="MCP助手，连接MCP服务并处理查询")
    parser.add_argument(
        "--log-level", 
        choices=["debug", "info", "warning", "error", "critical"],
        default="info",
        help="设置日志级别 (默认: info)"
    )
    parser.add_argument(
        "--log-dir",
        default=None,
        help="设置日志目录 (默认: 使用.env中的配置或logs目录)"
    )
    parser.add_argument(
        "--host", 
        default="0.0.0.0",
        help="设置监听主机 (默认: 0.0.0.0)"
    )
    parser.add_argument(
        "--port", 
        type=int,
        default=8000,
        help="设置监听端口 (默认: 8000)"
    )
    parser.add_argument(
        "--reload", 
        action="store_true",
        help="启用自动重载 (开发模式)"
    )
    
    args = parser.parse_args()
    
    # 设置环境变量以供日志模块使用
    os.environ["LOG_LEVEL"] = args.log_level
    
    # 处理日志目录配置
    log_dir = args.log_dir
    
    # 如果没有指定日志目录，尝试从环境变量获取
    if not log_dir:
        from dotenv import load_dotenv
        load_dotenv()
        log_dir = os.getenv("LOG_DIR", "logs")
    
    # 设置环境变量
    os.environ["LOG_DIR"] = log_dir
    
    # 验证日志目录
    log_dir_path = Path(log_dir)
    if not log_dir_path.is_absolute():
        # 相对路径，转换为绝对路径
        log_dir_path = Path(os.getcwd()) / log_dir
    
    if not validate_log_dir(log_dir_path):
        print("日志目录验证失败，程序退出")
        sys.exit(1)
    
    # 启动应用
    print(f"启动MCP助手，日志级别: {args.log_level.upper()}, 日志目录: {log_dir_path}")
    uvicorn.run(
        "app.main:app", 
        host=args.host, 
        port=args.port, 
        reload=args.reload,
        log_level=args.log_level
    )

if __name__ == "__main__":
    main()